/*
 * nojs的关于本项目的通用的一些封装
 */
;
(function($, $nojs) {
	if (!$ || !$nojs) {
		try {
			console.warn("jQuery or $nojs is not define ");
		} catch (e) {
			console.warn("what happend ");
		}
	}
	/**
	 * 001. 在iframe内触发父document的Multitabs方法新建tab
	 * https://gitee.com/edwinhuish/multi-tabs/tree/master
	 * url: 1-绑定在当前link上面 data-url="url"
	 *      2-绑定在父级table上面:hasClass('in-table') data-form-url="url"
	 */
	$nojs.addMultitab = {
		enable: function() {
			return !!$.fn.multitabs;
		},
		selector: "a.add-multitab,button.add-multitab",
		// 请求参数 放在按钮中的<i class="action-param" data-key="" data-value="">
		option: {
			param: ".action-param"
		},
		init: function(context) {
			var module = this;
			$(context).on('click', module.selector, function() {
				var $link = $(this);
				var url = $link.data("url");
				//如果这个按钮在table里面
				var inTable = $link.hasClass('in-table');
				if (inTable) {
					url = $link.closest("table").data("formUrl") + "?id=" + $link.data("id");
				}
				if (!url && !inTable) {
					return true;
				}

				var title = $link.data("title") || $link.text();
				//url 追加请求参数
				$(module.option.param, $link).each(function(index, element) {
					if (index == 0) {
						var $param = $(element);
						url = url + "?" + $param.data("key") + "=" + $param.data("value")
					} else {
						url = url + "&" + $param.data("key") + "=" + $param.data("value")
					}
				});
				//在iframe内触发父document的Multitabs方法新建tab
				common.addTab(url, title);

			});
		}
	};

	/**
	 * 002. 为按钮绑定异步提交表单事件
	 */
	$nojs.ajaxSubmitForm = {
		enable: function() {
			return !!$.fn.ajaxSubmit;
		},
		selector: "form button.action-ajax-form",
		options: {
			dataType: 'json',
			type: 'post',
			success: function(data) {
				common.alert(data, function(){
					top.common.closeTab();
				});
			},
			error: function(jqXHR, textStatus, errorMsg) { // 出错时默认的处理函数
				$.alert("请求失败:" + jqXHR.status + ":" + errorMsg, "请求失败");
			}
		},
		init: function(context) {
			var module = this;
			$(context).on('click', module.selector, function() {
				var $btn = $(this);
				var $form = $btn.closest("form");
				var url = $form.attr("action");
				if (!url) {
					console.info("当前form表单没有指定提交路径");
					return true;
				}
				var options = module.options;
				options.url = base_url + url;
				$request.addToken(options);
				//触发jquery.validate
				var validate = $form.data("validator");
				if (validate && !$form.valid()) { //如果有验证 但是验证不通过
					return false;
				}
				//提交成功后的回调
				var afterFn = $btn.data("after");
				if(afterFn) {
					options.success =  function(data){
						common.callFunction(afterFn, data);
					};
				}
				$form.ajaxSubmit(options);
			});
		}
	};

	/**
	 *004. form 表单验证
	 */
	$nojs.validation = {
		enable: function() {
			return !!$.fn.validate;
		},
		selector: "form.validate",
		init: function(context) {
			var $forms = $(this.selector, context);
			var option = { // 验证的一些设置
				ignore: ".novalidate", // 对某些元素不验证
				errorClass: "help-inline", // 默认 "error"。指定错误提示的 css 类名
				errorElement: "label", // 指定使用什么标签标记错误。
				errorPlacement: function(error, element) { // 跟一个函数，可以自定义错误放到哪里。
					$(element).closest('.form-group').find(
						".form-control-static").append(error);
				},
				highlight: function(element) { // 可以给未通过验证的元素加效果、闪烁等。
					$(element).closest('.form-group').addClass('has-error');
				},
				unhighlight: function(element) {
					$(element).closest('.form-group').removeClass('has-error');
				}
			};
			$forms.each(function() {
				var $form = $(this);
				var opts = $.extend(true, {}, option, $form.data())
				$form.validate(opts);
			});

		}
	};

	/**
	 * 005. 一些操作按钮
	 */
	$nojs.actions = {
		enable: true,
		init: function(context) {
			for (var name in this) {
				var action = this[name];
				if (action && action.init) {
					action.init(context);
				}
			}
		},
		closeTab: { //关闭当前tab
			selector: '.action-close-tab',
			init: function(context) {
				$(context).on('click', this.selector, function() {
					// 关闭后激活哪个tab
					var goTab = $(this).data("goTab")
					common.closeTab(false, false, goTab);
				});
			}
		}
	};

	/**
	 * 006. 加载字典下拉框或者其他下拉框
	 * //TODO 前端缓存字典
	 */
	$nojs.loadDictSelect = {
		enable: true,
		selector: 'select[data-pcode],select[data-url]',
		$template:$('<option></option>'),
		priority: -1,//在nojs中的执行顺序 越小越先执行
		init: function(context){
			var module = this;
			$(module.selector, context).each(function(){
				var $select = $(this);
				var url = $select.data("url");
				var pcode = $select.data("pcode");
				if(!url && !pcode) return true;
				url = url || "/system/common/dictSelect"
				$request.post(url, {async: false, data:{pcode:pcode}}, function(result){
					$.each(result.data, function(index, opt){
						var $opt = module.$template.clone().text(opt.text).val(opt.id); 
						$select.append($opt);
					});
				})
					
				
			});
		}
	};

	//007. -随机标签的颜色
	$nojs.randomLabel = {
		enable:true,
		selector: "span[data-random-label]",
		labelClass:['label label-primary',  'label label-success', 'label label-warning',  'label label-info','label label-danger', 'label label-default' ],
		getRandomLableClass: function(lableNumer){
			var module = this;
			if(isNaN(lableNumer)) {//此处不再做额外的处理
				lableNumer = 0;
			}
			if(lableNumer === true) {
				lableNumer == 1;
			}
			var index = lableNumer % 6;
			return module.labelClass[index];
			
		},
		init: function (context) {
			var module = this;
			$(module.selector, context).each(function(){
				var $label = $(this);
				var lableNumer = $label.data("randomLabel");
				$label.addClass(module.getRandomLableClass(lableNumer));
				
			});
		}
	};

})(jQuery, $nojs);
